<?php
// 操作日志记录工具函数

/**
 * 记录管理员操作日志
 * @param PDO $pdo 数据库连接
 * @param int|null $adminId 管理员ID
 * @param string $username 管理员用户名
 * @param string $action 操作类型
 * @param string $module 操作模块
 * @param string $description 操作描述
 * @param array|null $requestData 请求数据
 */
function logAdminOperation($pdo, $adminId, $username, $action, $module, $description, $requestData = null) {
    try {
        // 获取客户端IP
        $ipAddress = $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['HTTP_X_REAL_IP'] ?? $_SERVER['REMOTE_ADDR'] ?? 'unknown';
        
        // 获取用户代理
        $userAgent = $_SERVER['HTTP_USER_AGENT'] ?? 'unknown';
        
        // 准备请求数据（过滤敏感信息）
        $filteredRequestData = null;
        if ($requestData) {
            $filteredRequestData = $requestData;
            // 过滤敏感字段
            $sensitiveFields = ['password', 'token', 'session_key', 'openid'];
            foreach ($sensitiveFields as $field) {
                if (isset($filteredRequestData[$field])) {
                    $filteredRequestData[$field] = '***';
                }
            }
        }
        
        // 插入操作日志
        $stmt = $pdo->prepare("
            INSERT INTO admin_operation_logs 
            (admin_id, username, action, module, description, request_data, ip_address, user_agent, created_at) 
            VALUES (?, ?, ?, ?, ?, ?, ?, ?, NOW())
        ");
        
        $stmt->execute([
            $adminId,
            $username,
            $action,
            $module,
            $description,
            $filteredRequestData ? json_encode($filteredRequestData, JSON_UNESCAPED_UNICODE) : null,
            $ipAddress,
            $userAgent
        ]);
        
        return true;
    } catch (Exception $e) {
        error_log("记录操作日志失败: " . $e->getMessage());
        return false;
    }
}

/**
 * 从请求头中获取当前管理员信息
 * @param PDO $pdo 数据库连接
 * @return array|null [admin_id, username] 或 null
 */
function getCurrentAdmin($pdo) {
    try {
        // 方法1：从Authorization头获取token（如果有token系统）
        $authHeader = $_SERVER['HTTP_AUTHORIZATION'] ?? '';
        if ($authHeader && preg_match('/Bearer\s+(.+)/', $authHeader, $matches)) {
            // 这里可以添加token验证逻辑
            // 暂时返回默认管理员信息
        }
        
        // 方法2：从session获取（如果使用session）
        if (isset($_SESSION['admin_id']) && isset($_SESSION['admin_username'])) {
            return [$_SESSION['admin_id'], $_SESSION['admin_username']];
        }
        
        // 方法3：简化方案 - 查询最近活跃的管理员（用于演示）
        $stmt = $pdo->prepare("
            SELECT id, username 
            FROM admin_users 
            WHERE status = 'active' 
            AND last_login_time IS NOT NULL 
            ORDER BY last_login_time DESC 
            LIMIT 1
        ");
        $stmt->execute();
        $admin = $stmt->fetch();
        
        if ($admin) {
            return [$admin['id'], $admin['username']];
        }
        
        // 回退方案：返回默认管理员
        return [1, 'admin'];
        
    } catch (Exception $e) {
        error_log("获取当前管理员信息失败: " . $e->getMessage());
        return [1, 'admin']; // 回退到默认值
    }
}
?>